home
***
CD-ROM
|
disk
|
FTP
|
other
***
search
/
Internet Surfer: Getting Started
/
Internet Surfer - Getting Started (Wayzata Technology)(7231)(1995).bin
/
pc
/
mac
/
bonus
/
peter_le
/
talk_sou
/
my_libra
/
myutils.uni
< prev
next >
Wrap
Text File
|
1992-04-20
|
8KB
|
376 lines
unit MyUtils;
{ This program was written by Peter N Lewis, Mar 1992 in THINK Pascal 4.0.1 }
interface
type
versionRecord = packed record
version: integer;
devcode: byte;
revision: byte;
country: integer;
short: str15;
long: str255;
end;
function TrapAvailable (tNumber: INTEGER): BOOLEAN;
function MyNumToString (n: longInt): str255;
function NumToStr (n: longInt): str255;
function StrToNum (s: str255): longInt;
function GetIndexedString (strh, i: integer): str255;
procedure DotDotDot (var s: str255; var width: integer);
procedure SetItemEnable (mh: menuHandle; item: integer; enable: boolean);
procedure SetIDItemEnable (menu, item: integer; enable: boolean);
function GetIDItemEnable (menu, item: integer): boolean;
function GetItemEnable (mh: menuHandle; item: integer): boolean;
procedure DotItem (mh: menuHandle; item: integer; dotted: boolean);
function MyFrontWindow: boolean;
function DAFrontWindow: boolean;
function GetIndStrSize (size, id, index: integer): str255;
procedure GetVersion (var vers: versionRecord);
procedure SetVersionParamText (c2, c3: str255);
function GetDirID (wdrn: integer; var vrn: integer; var dirID: longInt): OSErr;
function GetVolInfo (var name: str63; var vrn: integer; index: integer; var CrDate: longInt): OSErr;
procedure PlotSICN (id: integer; index, v, h: integer);
procedure SegmentInit;
procedure SegmentUtil;
procedure SegmentUtil2;
procedure SegmentTerm;
function HLockState (h: univ handle): signedByte;
{ procedure SPrintS5V (var dst: str255;var src,s1, s2, s3, s4, s5: str255);}
procedure SPrintS5 (var dst: str255; src, s1, s2, s3, s4, s5: str255);
procedure SPrintS3 (var dst: str255; src, s1, s2, s3: str255);
function UpCase (ch: char): char;
implementation
uses
MyTypes, Traps;
{$S Init}
procedure SegmentInit;
begin
end;
{$S Util}
procedure SegmentUtil;
begin
end;
{$S Util2}
procedure SegmentUtil2;
begin
end;
{$S Term}
procedure SegmentTerm;
begin
end;
{$S Util}
function TrapAvailable (tNumber: INTEGER): BOOLEAN;
{Check to see if a given trap is implemented. Babble as taken from IM6 }
const
TrapMask = $0800;
var
tType: TrapType;
ignoreError: OSErr;
begin
if BAND(tNumber, TrapMask) > 0 then
tType := ToolTrap
else
tType := OSTrap;
if tType = ToolTrap then begin
tNumber := BAND(tNumber, $7FF);
if tNumber >= $400 then
tNumber := _Unimplemented
else if tNumber >= $200 then
if NGetTrapAddress($A86E, ToolTrap) <> NGetTrapAddress($AA6E, ToolTrap) then
tNumber := _Unimplemented;
end;
TrapAvailable := NGetTrapAddress(tNumber, tType) <> GetTrapAddress(_Unimplemented);
end; {TrapAvailable}
{$S Util}
function MyNumToString (n: longInt): str255;
var
s: str255;
begin
if abs(n) < 4096 then
NumToString(n, s)
else if abs(n) < 4194304 then begin
NumToString(n div 1024, s);
s := Concat(s, 'k');
end
else begin
NumToString(n div 1048576, s);
s := Concat(s, 'M');
end;
MyNumToString := s;
end;
{$S Util}
function NumToStr (n: longInt): str255;
var
s: str255;
begin
NumToString(n, s);
NumToStr := s;
end;
{$S Util}
function StrToNum (s: str255): longInt;
var
n: longInt;
begin
StringToNum(s, n);
StrToNum := n;
end;
{$S Util}
function GetIndexedString (strh, i: integer): str255;
var
s: str255;
begin
GetIndString(s, strh, i);
GetIndexedString := s;
end;
{$S Util2}
procedure DotDotDot (var s: str255; var width: integer);
var
maxwidth, len: integer;
begin
maxwidth := width;
width := StringWidth(s);
if width > maxwidth then begin
width := width + CharWidth('╔');
{$PUSH}
{$R-}
len := ord(s[0]);
while (len > 0) and (width > maxwidth) do begin
width := width - CharWidth(s[len]);
len := len - 1;
end;
len := len + 1;
s[0] := chr(len);
s[len] := '╔';
{$POP}
end;
end;
{$S}
procedure SetItemEnable (mh: menuHandle; item: integer; enable: boolean);
begin
if enable then
EnableItem(mh, item)
else
DisableItem(mh, item);
end;
{$S}
procedure SetIDItemEnable (menu, item: integer; enable: boolean);
begin
SetItemEnable(GetMHandle(menu), item, enable);
end;
{$S}
function GetItemEnable (mh: menuHandle; item: integer): boolean;
begin
if item > 31 then
GetItemEnable := true
else
GetItemEnable := BTST(mh^^.enableFlags, item);
end;
{$S}
function GetIDItemEnable (menu, item: integer): boolean;
begin
GetIDItemEnable := GetItemEnable(GetMHandle(menu), item);
end;
{$S Util2}
procedure DotItem (mh: menuHandle; item: integer; dotted: boolean);
begin
if dotted then
SetItemMark(mh, item, 'Ñ')
else
SetItemMark(mh, item, chr(0));
end;
{$S Util2}
function MyFrontWindow: boolean;
var
wp: windowPtr;
begin
wp := FrontWindow;
if wp = nil then
MyFrontWindow := false
else
MyFrontWindow := windowPeek(wp)^.windowKind >= userKind;
end;
{$S Util2}
function DAFrontWindow: boolean;
var
wp: windowPtr;
begin
wp := FrontWindow;
if wp = nil then
DAFrontWindow := false
else
DAFrontWindow := windowPeek(wp)^.windowKind < 0;
end;
{$S Util2}
function GetIndStrSize (size, id, index: integer): str255;
var
s255: str255;
begin
GetIndString(s255, id, index);
GetIndStrSize := copy(s255, 1, size - 1);
end;
{$S Util}
procedure GetVersion (var vers: versionRecord);
var
vh: handle;
begin
with vers do begin
vh := GetResource('vers', 1);
if vh = nil then begin
version := $0000;
devcode := $20;
revision := $00;
country := 0;
short := '0.0.0';
long := 'Unknown v0.0.0';
end
else begin
BlockMove(vh^, @vers, sizeof(vers));
{$PUSH}
{$R-}
BlockMove(Ptr(longint(vh^) + (longint(@short) - longint(@vers)) + ord(short[0]) + 1), @long, sizeof(long));
if ord(short[0]) >= sizeof(short) then
short[0] := chr(sizeof(short) - 1);
{$POP}
ReleaseResource(vh);
end;
end;
end;
{$S Util}
procedure SetVersionParamText (c2, c3: str255);
var
vers: versionRecord;
begin
GetVersion(vers);
ParamText(vers.short, vers.long, c2, c3);
end;
{$S Util}
function GetDirID (wdrn: integer; var vrn: integer; var dirID: longInt): OSErr;
var
procID: longInt;
oe: OSErr;
begin
oe := GetWDInfo(wdrn, vrn, dirID, procID);
if oe <> noErr then begin
vrn := wdrn;
dirID := 0;
end;
GetDirID := oe;
end;
{$S Util2}
function GetVolInfo (var name: str63; var vrn: integer; index: integer; var CrDate: longInt): OSErr;
var
pb: paramBlockRec;
oe: OSErr;
begin
with pb do begin
if (name <> '') & (name[length(name)] <> ':') then
name := concat(name, ':');
pb.ioNamePtr := @name;
ioVRefNum := vrn;
ioVolIndex := index;
oe := PBGetVInfo(@pb, false);
if oe = noErr then begin
vrn := ioVRefNum;
CrDate := ioVCrDate;
end;
end;
GetVolInfo := oe;
end;
{$S Util}
procedure PlotSICN (id: integer; index, v, h: integer);
var
sh: Handle;
bm: BitMap;
r: Rect;
gp: grafptr;
begin
sh := GetResource('SICN', id);
HLock(sh);
bm.baseAddr := Ptr(longInt(sh^) + (index - 1) * 32);
bm.rowBytes := 2;
SetRect(r, h, v, h + 16, v + 16);
bm.bounds := r;
GetPort(gp);
CopyBits(bm, gp^.portBits, r, r, srcCopy, nil);
HUnlock(sh);
end;
function HLockState (h: univ handle): signedByte;
begin
HLockState := HGetState(h);
HLock(h);
end;
procedure DoSub (var dst: str255; n: integer; var s: str255);
var
p: integer;
begin
p := Pos(concat('^', chr(n + 48)), dst);
if p > 0 then begin
Delete(dst, p, 2);
Insert(s, dst, p);
end;
end;
{$Z+}
procedure SPrintS5V (var dst: str255; var src, s1, s2, s3, s4, s5: str255);
begin
dst := src;
DoSub(dst, 5, s5);
DoSub(dst, 4, s4);
DoSub(dst, 3, s3);
DoSub(dst, 2, s2);
DoSub(dst, 1, s1);
end;
{$Z-}
procedure SPrintS5 (var dst: str255; src, s1, s2, s3, s4, s5: str255);
begin
SPrintS5V(dst, src, s1, s2, s3, s4, s5);
end;
procedure SPrintS3 (var dst: str255; src, s1, s2, s3: str255);
begin
dst := src;
DoSub(dst, 3, s3);
DoSub(dst, 2, s2);
DoSub(dst, 1, s1);
end;
function UpCase (ch: char): char;
begin
if ch in ['a'..'z'] then
UpCase := chr(ord(ch) - $20)
else
UpCase := ch;
end;
end.